Spring Data JPA-তে @Query
অ্যানোটেশনটি ব্যবহার করে কাস্টম SQL বা HQL (Hibernate Query Language) কোয়েরি লেখা যায়। এটি এমন ক্ষেত্রে কার্যকর যখন ডিফল্ট মেথড বা কোয়েরিগুলো অ্যাপ্লিকেশনের চাহিদা পূরণ করতে পারে না।
:parameterName
) বা পজিশনাল প্যারামিটার (?index
) ব্যবহার করা যায়।nativeQuery = true
ব্যবহার করা হয়।Spring Data JPA ব্যবহার করতে নিম্নোক্ত ডিপেনডেন্সি যোগ করতে হবে:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
@Column(name = "age")
private int age;
// Getters and Setters
}
JPA রেপোজিটরি ইন্টারফেস তৈরি করে কাস্টম SQL কোয়েরি সংজ্ঞায়িত করা যাবে।
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
// Custom Query to find users by name
@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findUsersByName(@Param("name") String name);
// Custom Query to find users above a certain age
@Query("SELECT u FROM User u WHERE u.age > ?1")
List<User> findUsersAboveAge(int age);
// Native SQL Query to fetch users by email
@Query(value = "SELECT * FROM users WHERE email = ?1", nativeQuery = true)
User findUserByEmail(String email);
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getUsersByName(String name) {
return userRepository.findUsersByName(name);
}
public List<User> getUsersAboveAge(int age) {
return userRepository.findUsersAboveAge(age);
}
public User getUserByEmail(String email) {
return userRepository.findUserByEmail(email);
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/by-name/{name}")
public List<User> getUsersByName(@PathVariable String name) {
return userService.getUsersByName(name);
}
@GetMapping("/above-age/{age}")
public List<User> getUsersAboveAge(@PathVariable int age) {
return userService.getUsersAboveAge(age);
}
@GetMapping("/by-email")
public User getUserByEmail(@RequestParam String email) {
return userService.getUserByEmail(email);
}
}
Spring ORM এ @Query
অ্যানোটেশন ব্যবহার করে কাস্টম কোয়েরি তৈরি ডাটাবেস অপারেশনকে আরও সুনিয়ন্ত্রিত এবং কার্যকর করতে সাহায্য করে।